//package com.udf.hive.udf.similarity;
//
//import org.apache.hadoop.hive.ql.exec.UDF;
//import org.apache.hadoop.io.Text;
//import org.xm.Similarity;
//
//import java.util.*;
//
///**
// * 相似度计算
// */
//public class SimilarityComplexCompute extends UDF {
//
//    /**
//     * 复杂测试，字段的个数是动态的，字段的权重也是动态的
//     * 分组按照顺序进行排列
//     * concat_ws(";", concat_ws("-", 分段值，分段阈值, 对比表字段1,基表字段1, "段内权重", "字段权重"), ... )); ，写hive sql的时候这样传进去
//     * @param array
//     * @return
//     */
//    public Text evaluate(Text array) {
//        // 区分组
//        String[] arrays = String.valueOf(array).split(";");
//        Text result = new Text("");
//
//        Map<Integer, List<SimPojo>> listMap = new TreeMap<>(new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o1.compareTo(o2);
//            }
//        });
//
//        // 字段排列
//        for (String item : arrays) {
//            String[] groups = item.split("-");
//            Integer fdz = Integer.parseInt(groups[0]);
//            if (listMap.containsKey(fdz)) {
//                List<SimPojo> list = listMap.get(fdz);
//                list.add(new SimPojo(groups[1], groups[2], Float.parseFloat(groups[3]), Float.parseFloat(groups[4]), fdz, Float.parseFloat(groups[0])));
//                listMap.put(fdz, list);
//            }
//            else {
//                List<SimPojo> list = new ArrayList<>();
//                list.add(new SimPojo(groups[1], groups[2], Float.parseFloat(groups[3]), Float.parseFloat(groups[4]), fdz, Float.parseFloat(groups[0])));
//                listMap.put(fdz, list);
//            }
//        }
//
//        double totalSum = 0;
//        // 开始遍历计算
//        for (Map.Entry<Integer, List<SimPojo>> listitem : listMap.entrySet()) {
//            List<SimPojo> value = listitem.getValue();
//            float fdyz = value.get(0).getFdyz();
//            double sum = 0;
//            for (SimPojo simPojo : value) {
//                double simResult = Similarity.cilinSimilarity(simPojo.getDbbfield(), simPojo.getJzbfield());
//                // 计算分段权重
//                sum = sum + simResult * simPojo.getDnqz();
//                // 计算字段权重
//                totalSum = totalSum + simResult * simPojo.getZdqz();
//            }
//            // 如果小于分段阈值，直接推出不往下计算
//            if (sum < fdyz) {
//                break;
//            }
//        }
//        // 设置返回值
//        result.set(totalSum + "");
//        return result;
//    }
//}
